Packet-switched telecommunications networks feature traffic, such as voice, video, and/or text, which is split or subdivided into pieces called packets. Packet communications use statistical multiplexing or dynamic bandwidth allocation where a physical communication channel is divided into a number of variable bit rate channels or streams. On the destination end, these packets are re-assembled based on their packet numbers and other statistical factors.
Packet-switched traffic is subject to Quality of Service (“QoS”) issues, such as delay, jitter, dropped packets, out-of-order delivery, and/or packet corruption errors. For example, in a typical Voice over Internet Protocol (“VoIP”) system a first person's voice stream is digitized, compressed, and sub-divided into packets of encoded binary data by a first gateway. The packets are sent over a Virtual Private Network (“VPN”) or an unregulated or public network, which delivers them to a far-end gateway with varying amounts of delay on each packet. The far-end gateway re-orders the received packets, then uncompresses (or synonymously decodes) the encoded binary data and thus provides a continuous audio stream to a second person. The audio stream is a slightly delayed copy of the first person's audio stream. In the example, the QoS is lowered by distortions introduced by, for example, the total delay from the speech event to aural reception, drop outs and other artifacts due to packets arriving too early (due to differential transit path length) or too late (such as due to network congestion and/or differential path length) to be correctly included in the audio stream, outright packet loss, buffer overflow, and other factors. The QoS problems are worsened for a multimedia conference where one must insure isochronous (equally timed) delivery of different types of traffic, such as voice and video.
A number of techniques have been developed to control the various factors impacting adversely the QoS. These techniques include jitter buffers, the ReSerVation Protocol (“RSVP”), the Differential Services (DiffServ) protocol, redundant transmission (such as specified in RFC-2198), scheduling algorithms (such as Weighted Fair Queuing (“WFQ”)), class-based queuing, congestion avoidance mechanisms (such as Random Early Detection (“RED”) and Weighted Random Early Detection (“WRED”)), and the like.
A jitter buffer is a hardware device or software process that reduces jitter caused by transmission delays. As the jitter buffer receives packets, it writes them into memory in order of arrival. Packets are read out in proper sequence at the earliest possible time; that is, the packets are re-sequenced when out of order and are re-timed based on the local clock controlling the read pointer. The maximum net jitter that can be countered by a de-jitter buffer is equal to the buffering delay introduced before starting the play-out of the media stream. Without a jitter buffer to smooth the transmission, data can be lost, resulting, in the case of voice signals, in a perceivably choppy audio stream.
Jitter buffer size can be important to the listener-perceived quality of the audio stream. A large buffer, while permitting fewer packets to be lost, can introduce a large delay into the outputted audio stream. By contrast, a small jitter buffer, while introducing a smaller delay into the outputted audio stream, can cause significant packet loss. Call quality degrades when the network jitter exceeds the size of the jitter buffer. Accordingly, a jitter buffer of medium capacity or a jitter buffer of variable capacity is typically employed.
Although single buffers are common, prior art dual buffers have been employed in voice communications. In one implementation, a port network employed dual buffers of static capacities to effect dynamic bandwidth allocation. One buffer corresponded to Time Division Multiplexed (“TDM”) data (which was not timestamped) and the other to packet data. The TDM data was assumed to be implicitly synchronized, always in order, and was taken in preferentially to packet data. Thus, the TDM data was not reordered due to jitter or latency. Each buffer had read and write pointers to maintain buffer state. A pop pointer allows resequencing of packets that arrived out of order. A controller selected TDM data preferentially when the next sequential memory location possessed such TDM data. Whenever the TDM buffer was unoccupied, the packet data buffer was read from, as needed, to provide data for selected memory locations having no TDM data.
Notwithstanding these techniques, QoS issues at the far-end gateway remain a problem.